﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Data;
using System.Data.SqlClient;

namespace RBAC.IDAL
{
    internal interface IBasicOperation<T>
    {
        /// <summary>
        /// 获取记录条数
        /// <para name="strWhere">条件sql语句，不用加where</para>
        /// </summary>
        int GetRecordCount(string strWhere);
        /// <summary>
        /// 增加一条数据
        /// </summary>
        int Add(T model);

        /// <summary>更新一条数据
        /// </summary>
        /// <param name="isPermit">是否启用事务</param>
        bool Update(T model);

        /// <summary>更行一条数据
        /// </summary>
        /// <param name="isTransaction">控制是否启用事务 TRUE代表启用FLASE代表不启用，</param>
        /// <param name="strWhere">存储过程的名字或者 T-SQL 语句</param>
        /// <param name="commandParameters">以数组形式提供SqlCommand命令中用到的参数列表</param>
        /// <returns>返回是否更行成功</returns>
        bool Update(string strWhere, params SqlParameter[] commandParameters);

        /// <summary>删除一条指定的主键的数据
        /// </summary>
        /// <param name="isPermit">是否启用事务</param>
        bool Delete(int id);
        /// <summary>
        /// 删除多条指定主键的数据
        /// </summary>
        bool Delete(IList<int> id);

        /// <summary>是否存在该主键记录
        /// </summary>
        bool Exists(int id);

        /// <summary>是否存在该唯一标示的记录
        /// </summary>
        bool Exists(string id);

        /// <summary>通过主键得到一个对象实体
        /// </summary>
        T GetModel(int id);

        /// <summary>根据条件获取泛型数据列表
        /// </summary>
        IList<T> GetIList(string strWhere, string Orderby);

        /// <summary>根据条件获取数据集
        /// </summary>
        DataSet GetList(string strWhere, string Orderby);

        /// <summary>
        /// 根据分页获得数据列表
        /// 分页存储过程，具体方法到dal里头看
        /// </summary>
        DataSet GetList(int PageSize, int PageIndex, string strWhere, string OrderFiled, string OrderBy);

        /// <summary>
        /// 根据分页获得数据列表
        /// 分页存储过程，具体方法到dal里头看
        /// </summary>
        IList<T> GetIList(int PageSize, int PageIndex, string strWhere, string OrderFiled, string OrderBy);

        /// <summary>
        /// 通过条件获取分页数据集
        /// MSSQL自带表Pager
        /// </summary>
        /// <param name="fldName">所要查询的字段名列表，以逗号分开</param>
        /// <param name="tblName">表名称</param>
        /// <param name="Condition">过滤条件</param>
        /// <param name="orderBy">排序规则</param>
        /// <param name="pageSize">页长</param>
        /// <param name="currentIndex">当前页码</param>
        /// <param name="count">列表总数量</param>
        /// <returns></returns>
        DataSet GetList(string fldName, string tblName, string Condition, string orderBy, int pageSize, int currentIndex,ref int count);
    }
}
